package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:
 * author: Mr.Du
 * Date: 2022/10/30
 * Time: 2:29
 */
public class NumDecode {
    
    public static void main(String[] args) {
        System.out.println(numDecode("12"));
    }
    
    
    public static int numDecode(String s) {
        int n = s.length();
        s = " " + s;
        char[] chars = s.toCharArray();
        int[] f = new int[n + 1];
        f[0] = 1;
        // 状态转移方程为f[i] = f[i-1] 前提是1 <= chars[i] - '0'<=9
        // f[i] += f[i-2]    前提是10 <= chars[i] - '0' + (chars[i-1] - '0') * 10 <= 26
        for (int i = 1; i <= n; i++) {
            // a : 代表「当前位置」单独形成 item
            // b : 代表「当前位置」与「前一位置」共同形成 item
            int a = chars[i] - '0', b = (chars[i - 1] - '0') * 10 + (chars[i] - '0');
            // 如果 a 属于有效值，那么 f[i] 可以由 f[i - 1] 转移过来
            if (1 <= a && a <= 9) f[i] += f[i - 1];
            // 如果 b 属于有效值，那么 f[i] 可以由 f[i - 2] 或者 f[i - 1] & f[i - 2] 转移过来
            if (10 <= b && b <= 26) f[i] += f[i - 2];
        }
        return f[n];
    }
    
    
}
